Contents of Python
Test
Notes on Atiyah's Commutative Algebra
(ii):类似的手段,证明
(iii):取
(iv):
反过来如果
(i)
(iii)
(ii)
注:此题中(i)推(iii)也可以通过如下引理得到
中的幂等元可以被提升为 中幂等元,这里
假设存在
(iii):假设
另证:依
(iv):只需证Hausdorff,而这是因为Boole环中素理想皆极大(
反过来的验证和说明这两个对应关系互逆的证明同样循规蹈矩。
反过来如果弱零点定理成立,那么对真理想
我们也可以这么考虑:任何
About Tensor Product
直观上来讲,双线性和对应着“乘法”,例如
如果模
模
唯一性由始对象的特质给出,也就是假设有两个张量积
存在性则考虑
映射
解释为泛性质,也就是每个双线性型
于是立即可知张量积在同构意义下的唯一性:对两个张量积
当然具体来说这一同构无非
Solution to Serre's Finite Group
如题
另证:令
关于Python流程控制、错误处理与文件操作
流程控制
For
for循环形如
1
2for VAR in ITERABLE:
BLOCK
如若ITERABLE中元素为tuple,也可以有如
1
2for VAR1,VAR2 in ITERABLE:
BLOCK
enumerate(ITERABLE)将一个可遍历的数据对象组合为一个索引序列(类型为enumerate),其元素为形如(index, item)的tuple。
range(start, stop[, step])生成可迭代的序列(类型为range),start默认为0,step默认为1。
Python有List
comprehension(列表推导式),形如[expression for item in iterable if condition == True]其中if条件默认为全部True。此外可以有[expression1 if condition1 else expression2 for item in iterable]的写法。
break可以结束最近的一个for或者while循环。
continue则是直接进入下一轮循环。
pass为空操作。
错误处理
raise [exceptionName [(reason)]]会抛出异常,名称为exceptionName而描述为reason,形如exceptionName: reason。raise会抓取最近的报错信息(如在上一层try中被抛出的,try中异常被处理结束之后便不会再抛出),如果没有默认RuntimeError。
try和except可以不让程序报错的情况下尝试执行一段代码并就相关异常抛出进行处理,具体来说形如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15try:
# ...some error prone code...
code block 1
except:
# ...do something with the error...
code block 2
except Exception_Name_1:
# ...do something with the error...
code block 3
else:
# ...to do when there is no error...
code block 4
finally:
#...some clean up code...
code block 5
如果出现异常(exception),那么将进入except:处理,默认任何异常都会进入except,而except Exception_Name_1只处理错误名称为Exception_Name_1的情形。finally:无论如何都会被执行。
文件操作
基本I/O
电脑向python程序输入数据可以通过电脑键盘(keyboard)和输入文件(input data file)来输入,输出数据可以通过the monitor screen和输出文件来输出。
variable_name = input([prompt])prompt用于提示用户,从屏幕上输入的内容总是str类型。
print(..., end = str)可以使print输出...后再输出str,默认str为换行。
文件可以被大体分为binary files (二进制文件)和text files (文本文件),文本文件存储的是ASCII码。二进制文件一般包含headers以标识其文件内容,如果header无效则supporting programs可能不会打开这个二进制文件或者报告其损坏。二进制文件相对来说读取和存储速度更快,更少限制性而且更具安全性,但更容易损坏。
基于unix的操作系统中文件路径分隔符(delimiters)用/,对大小写敏感。而Windows则是\,对大小写不敏感。带有.或..的文件路径为相对路径,如..\langur.txt定位当前目录的父目录中名为langur.txt的文件,而..\langur.txt则定位当前目录,..\..\langur.txt定位父目录的父目录。
OS模块
Python中os模块处理与操作系统的接口,需要import os。
os.getcwd()将返回当前工作目录的路径string。
os. listdir(dir)返回一个list,其中元素是dir中每个文件名称的string。dir默认是当前工作目录(string类型)。
os.remove(file)删除名为file的文件(file为string类型)。
os.rename(source, destination)将source重命名为destination。
os.mkdir(path)创建一个新目录path。
os.path.join(path, *paths)把一串路径串联成一个大路径。
os.path.exists(path)、os.path.isfile(path)和os.path.isdir(path)返回bool值判断是否存在如path所述的路径、目录和文件。
os.path.getmtime(path)返回path最新一次被修改的时间。
os.path.split(path)返回一对string,(head, tail),其中tail为字符串直至最末分隔符的后缀,其余在该分隔符前部分为head。
读入/写入文件
open ( file, mode, .. )会返回一个文件句柄,file为文件目录,可以绝对可以相对,mode是字符串以描述这个文件会如何被处理,具体来说的mode如下:
| 模式 | 描述 |
|---|---|
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w |
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头。文件不存在时会报I/O错误。 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
w+ |
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
rb |
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
wb |
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
.read(n)将从文件中读入n个字节的内容,默认全部读入(不推荐)。.readline(n)将从文件读取整行包括换行符\n,如果指定了一个非负数的参数,则返回指定大小的字节数,包括\n字符。如果已经到文件末尾(碰到结束符EOF)则会返回空字符串。.readlines()返回一个list,每个元素都是文件中的一行。如果碰到EOF则会返回空字符串。for i in f,其中f为读入文件句柄,可以按行迭代文件内容。
读入的结尾需要关闭文件,即.close()。
with statement可以自动关闭文件,它形如:
1
2
3with open(file, mode) as file_handler:
Statement_1
Statement_2
with open(file, mode, encoding='')将确定读入时选择的编码。如encoding='ascii'、encoding='utf-8'分别对应ascii码和utf-8编码的情况。python3默认为utf-8。
file.write(byte)可以向file_handle对于文件中写入string。write不会自动补上换行符。与read时类似的也有file_handle.writelines(list)。(同样不会默认加\n)
常见文本文件格式
.txt / .tsv文件用Tab制表符\t分隔,CSV(Comma Separated
Values)文件用,分隔。
import csv 可以调用CSV模块。
csv.reader(file, delimiter='')返回一个reader
object,可以按行迭代csvfile文件中读取内容(每行都返回为string),csvfile可以是文件或文件对象,也可以是类似文件的对象(如StringIO对象)。delimiter为分隔符,默认为逗号,也可以改为如'等。类似地,csv.writer返回将数据写入
CSV 文件的写入器对象
在csv文件中写入内容可以考虑
1
2
3csvwriter = csv.writer(csvfile, delimiter='')
csvwriter.writerow(row)
csvwriter.writerows(rows)
delimiter默认为逗号。row是一个列表,rows则是每行对应列表之列表。writerows会自动换行。
csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)会返回一个类似reader的reader
object,但将每行中的信息映射到一个字典,该字典的keys由可选的fieldnames参数给出。fieldnames参数是一个序列。如果省略字段名,则文件f第一行中的值将用作字段名,并将从结果中省略。如果提供了字段名,将使用它们,并且第一行将包含在结果中。无论字段名是如何确定的,字典都会保留它们的原始顺序。例如csv.DictReader(f, fieldnames=['a', 'b', 'c'])则对应的keys是a,
b, c,而默认则是csv文件第一行对应内容。
如果一行的字段多于字段名,则将剩余的数据放入列表中,并使用由restkey指定的字段名(默认为None)存储。如果非空白行的字段少于字段名,则用restval的值(默认为None)填充缺失的值。
类似地还有csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)。它将创建一个对象,其操作方式与常规写入器类似,但将字典映射到输出行。fieldnames参数是一个键序列,用于标识传递给writerow方法的字典中的values写入文件f的顺序。它的用法例如
1
2
3
4
5
6
7
8
9
10import csv
with open('names.csv', 'w', newline='') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
Pickle模块
在程序生命周期中创建的所有变量都临时存储在内存中,并在程序终止时消失。而pickle模块是Python专用的持久化模块,也就是让数据持久化保存。 “Pickling” 是将 Python 对象层次结构转换为字节流的过程,而 “unpickling” 是逆操作。
pickle.dump(pythonObject, pickleDestination, pickle_protocol=None, *, fix_imports=True)将python对象pythonObject转换成写入pickleDestination的字节流。类似地可以用pickle.load(f)。用pickle.dump和pickle.load读写文件时要用wb和rb模式。
pickle.dumps(pythonObject)返回pythonObject转换而来的二进制串。pickle.loads(bytes_object)有类似功用。
Booleans, Integers, Floats, Strings, Tuples, Lists, Sets, Dictionaries均能被pickle。
Notes On Commutative Algebra
Borcherds交换代数网课的笔记
关于环与模
burnside多项式
对一般的不含幺环,我们某种意义上有办法把它变成一个含幺环,也就是“硬塞”一个新的单位元
注:unitization具有函子性,并且是
取
模
代数不变量
另一种观点是考虑群
也即
令
- 作为模或者理想有限生成
- 作为
上代数有限生成 - 作为域有限生成
诺特环
Reading Section (Eisenbud'c Commutative Algebra): 1.4
Exercises: 1.1, 1.3, 1.4, 1.5
1.
2. 任何
3.
注意到
多元多项式环中理想的生成元数量并不能被未定元数控制。例如
Hilbert基定理
Reading: Section 1,4
Exercises: 15.15 a
对
对
这涉及到无穷多次求和的操作,但注意到其中
证明
中一样将单项式列出,横轴为诸
注:5.3的证明对任何有限生成的自由Abel群均适用。
事实上上面证明了
不变量的有限生成性
Reading: Section 1.5
利用基定理可以证明一些不变量的有限生成性,至少是对有限群
注1:
注2:对满足
分裂,从而
现在回到6.1的证明:取
注1:此处的论证适用于一大类分次环。对分次环
注2:一般分次环中
应当注意到Reynolds算子对任意群和任意域并非总是存在,例如
此外对非紧群 
而这套论证在无穷维时则会基本失效,此时
诺特模
Noether对定理6.2中
Reading: Section 1.7 (似乎实则应当1.11(?
Exercises: 1.22, 1.23
与诺特环的情形一致,我们有:
是诺特模- 任何
子模组成集合都有包含意义下的极大元 - 任何子模的包含升链稳定
只需证
诺特环上
令
事实上这还能进一步推广:
证明则是完全相同的。
这里的自由解消并不保证有限,也不保证唯一,但Hilbert证明了对一些特定环和其上的模,自由解消总是有限而且某种意义上几乎唯一,可以从分次自由解消中取出某种“最小”解消,然后其它自由解消就相当于在其基础上加上如
则Hilbert的定理可以被陈述为:
这种消解的“几乎唯一”性给出了许多
不变量的有限生成性(续)
诺特证明了任意特征域上的
令
注:诺特的证明相比Hilbert对特征零情形的证明,难以推广到无限群的情形。
对更一般的情形,我们有定理:
在有限生成 -代数上作用的不变量总是有限生成 -代数 是约化群(reductive group)- 如果
在线性空间 上作用有非零的不动向量 ,则存在 作用下不动的多项式 使得
注1:Nagata证明了3推1,1推2某种意义上也是因为Nagata找到了一个G不是约化群时候不变量并非有限生成的例子,Haboush证明了2推3。
注2:条件3某种意义上在说存在一个非线性的Reynolds算子。在特征零的情况下,
注3(Borcherds猜测):
Notes On Fulton's Algebraic Curves
包括但不限于关于Fulton的Algebraic Curves中卡过我的/感觉有意思的/可能需要经常查看的/无端决定写在这里的东西。
1.1
考虑固定前
1.2
1.
2.
3.
对于1,假设存在多项式
1.3
注意到
反过来把
事实上此中有一些神奇的对应。不难证明
设
事实上我们也有
注意到我们考虑这种代数集和其理想之间的对应时完全没有用到多项式本身的性质。事实上
1.4
对
1.5
1.
2.
注意到
1.6
1.7
Hilbert弱零点定理可以被等价地叙述为如下定理的逆命题:若对
零点定理则可以被重述为如果
b.